package com.yujiahao.bigdata.rdd.insterance

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 TODO 将文件作为数据源，构建数据模型RDD
  一、textFile("文件路径",设置最小分区数)：返回结果为RDD数据模型，其中的泛型表示文件中的每一行数据。
    1、参数说明：第一个参数为【目标文件的路径】--可以是相对路径，也可以是绝对路径
              第二个参数表示最小分区数--参数存在默认值是可以不需要传递的。
    2、关于路径的说明
     2.1、绝对路径：不可改变路径。
        2.1.1、程序当中的称之为：
          >>网络：网络协议--//IP地址：端口号/地址。
          >>本地：file：/c:/xxx/xxx
      2.2、相对路径：可以改变的路径
      2.3、IDEA中的相对路径在哪里？系统参数：user.dir--项目的根目录（D:\Atguigu\05_Code\14_Spark\01_MySpark），可以改，一般不修改
      2.4、textFile可以是文件的路径，也可以是目录的路径，如果读取的文件名称有规律，可以采用通配符例如：word*.txt
  二、如果想要获取内容来自于那一份文件，textFile方法不适用，需要采用其他方法：wholeTextFile()
    1、参数说明：第一个参数为【目标文件的路径】--可以是相对路径，也可以是绝对路径
              第二个参数表示最小分区数--参数存在默认值是可以不需要传递的。
    2、返回值：wholeTextFile()返回值是一个Tuple：(数据的路径，数据的内容)
 */
object Spark01_RDD_Instance_Disk {
  def main(args: Array[String]): Unit = {
    //TODO 1、构建环境--获得连接
    val conf: SparkConf = new SparkConf().setAppName("WordCount").setMaster("local")
    val sc: SparkContext = new SparkContext(conf)

    //TODO 3、业务逻辑--将文件作为数据源，构建数据模型RDD

    //这里测试通配符
    // val rdd: RDD[String] = sc.textFile("data/word*.txt")

    //这行代码是打印IDEA中的相对路径的，系统参数："user.dir"
    println(System.getProperty("user.dir"))

    //测试wholeTextFile()
    val rdd: RDD[(String, String)] = sc.wholeTextFiles("data/word*.txt")

    //遍历打印
    rdd.collect().foreach(println)

    //TODO 5、释放资源--关闭连接
    sc.stop()

  }

}
